'''
@Project ：my_python_project
@File    ：propety_test.py
@IDE     ：PyCharm
@Author  ：xionglinhui
@Date    ：2024/10/21 上午8:14
'''

class Foo:
    def __init__(self, val):
        self.__NAME = val

    @property  # ==>这里等价于 name123 = property(name123)
    def name123(self):
        return self.__NAME

    @name123.setter
    def name123(self, value):
        if not isinstance(value, str):
            raise TypeError('%s must be str' %value)
        self.__NAME = value

    @name123.deleter
    def name123(self):
        # raise PermissionError('Can not delete')
        print('不让删除')


# '''示范1：隐藏NAME属性'''
f = Foo('LUCY')
# print(f.__dict__)                          # {'_Foo__NAME': 'LUCY'}
# print(f'f._Foo__NAME：{f._Foo__NAME}')     # f._Foo__NAME：LUCY
# print(f'f.name()：{f.name()}')             # f.name()：LUCY

# 使用property前，得到的是函数的内存地址
# print(f'f.name：{f.name}')   # f.name()：<bound method Foo.name of <__main__.Foo object at 0x7f1c28ad8f28>>
# 使用property后，将类中的函数“伪装成”对象的数据属性
# print(f'f.name：{f.name}')  # f.name：LUCY